
function scanQrCode() {
	myBar.scan({
		succ: function(cont) {
			wlog('got qr code: ' + cont);
			// alert(cont);
			var cp = toCoupon(cont);
			var pr = toProfile(cont);
			if (obj_being(cp)) {
				if (app.isLoggedIn()) {
					useCoupon(cp);
				} else {
					utils.toast('请先登录，再扫码用券');
				}
			} else if (obj_being(pr)) {
				if (app.isLoggedIn()) {
					grantMarketing(pr);
				} else {
					utils.toast('请先登录，再扫码授权');
				}
			} else {
				if (0 == cont.indexOf('http://') || 0 == cont.indexOf('https://')) {
					utils.openInBrowser(cont);
				} else {
                    utils.postErrNoTips(cont, 'scanner', 'fail-to-scan-qrcode');
                    alert('抱歉，暂不能处理，请联系技术');
                }
			}
		}
	});
}

function toCoupon(str) {
	if (str_being(str) && isJsonStr(str)) {
		var cp = toObj(str);
		if (0 == cp.errorno &&
			obj_being(cp.code) &&
			obj_being(cp.hashnum) &&
			obj_being(cp.uid)) {
			return cp;
		}
	}

	return undefined;
}

function toProfile(str) {
	if (str_being(str) && isJsonStr(str)) {
		var o = toObj(str);
		if ('profile' == o.qrType && str_being(o.uid) && str_being(o.name)) {
			return o;
		}
	}

	return undefined;
}

function useCoupon(cp) {
	if (cp.uid == app.auth.getMyId()) {
		utils.toast('不能使用自己的礼品券');
		return;
	}

	apix.confirm({
		title: '确定使用此礼品券？',
		btnCap: {
			ok: '使用',
			cancel: '取消',
		},
		onOK: function() {
			postUsingCoupon(cp);
		},
		onCancel: function() {
			tlog('do nothing');
		},
		// android上可以点mask，让对话框消失。此时，调用方应视自己情况，处理
		onDismiss: function() {
			tlog('do nothing');
		}
	});
}

function grantMarketing(pr) {
	var myId = app.auth.getMyId();
	if (pr.uid == myId) {
		utils.toast('你不能给自己授权');
		return;
	}

	var q = {
		action: 'cangrant',
		uid: myId
	};
	ajax_get(cfg.uni_code_api, q, {
		succ: function(json, url) {
			if (0 == json.errorno && json.cangrant) {
				apix.confirm({
					title: '确定给此用户授权地推兼职？',
					msg: pr.name + '(uid: ' + pr.uid + ')',
					btnCap: {
						ok: '授权',
						cancel: '取消',
					},
					onOK: function() {
						doGrant(pr);
					},
				});
			} else {
				utils.longToast('抱歉，你无权进行授权');
				var err = {
					warn: '有人在尝试授权地推兼职，但此人无权限. uid: ' + q.uid
				};
				utils.postErrNoTips(err, url);
			}
		},
		fail: function(err, url) {
			utils.postErrWithTips(err, url);
		}
	});
}

function doGrant(pr) {
	/*
		市场部同事给兼职授权[GET]
		wuchen/user_unique_code.php?action=grant&memberuid=xxx&memberusername=xxx&3rduid=xxx&3rdusername=xxx&belongto=xxx
			memberuid: 市场部同事
			memberusername: 市场部同事
			3rduid:兼职
			3rdusername:兼职
			belongto:兼职领队
	*/
	apix.prompt({
		title: '请输入兼职领队的姓名',
		msg: '(若没有，可不填)',
		btnCap: {
			ok: '确定',
			cancel: '取消',
		},
		onOK: function(text) {
			var my = app.auth.getUserData();
			var q = {
				action: 'grant',
				memberuid: my.uid,
				memberusername: my.name,
				'3rduid': pr.uid,
				'3rdusername': pr.name,
				belongto: str_being(text) ? text : ''
			};

			utils.loading();
			ajax_get(cfg.uni_code_api, q, {
				always: function() {
					utils.rmLoading();
				},
				succ: function(json) {
					if (0 == json.errorno) {
						utils.toast('授权成功');
					} else {
						utils.longToast('授权失败: ' + toJson(json));
					}
				},
				fail: function(err, url) {
					utils.postErrWithTips(err, url);
				}
			});
		},
	});
}

function postUsingCoupon(cp) {
	/*
		地推兼职扫描二维码，发起这个请求：【GET】
		wuchen/user_unique_code.php?action=usecode&uid=xxx&latitude=xxx&longitude=xxx&codeuid=xxx&code=xxx&device=xxx&hashnum=xxx&username=xxx
		uid：兼职uid
		username：兼职用户名
		codeuid：二维码中的用户的uid
		code：二维码中的6位数字
		hashnum：二维码中的hash码
		latitude、longitude：兼职的经纬度
	*/

	utils.loading();
	myAMapLoc.getLoc({
		succ: function(data) {
			var my = app.auth.getUserData();
			var q = {
				action: 'usecode',
				uid: my.uid,
				username: my.name,
				latitude: data.latitude,
				longitude: data.longitude,

				codeuid: cp.uid,
				code: cp.code,
				hashnum: cp.hashnum,
			};

			ajax_get(cfg.uni_code_api, q, {
				always: function() {
					utils.rmLoading();
				},
				succ: function(json, url) {
					if (0 == json.errorno) {
						utils.toast('扫券成功', function() {
							views.openPerformWin();
						}, 1000);
					} else {
						utils.longToast(json.msg);
    					utils.postErrNoTips(json, url);
					}
				},
				fail: function(err, url) {
					utils.postErrWithTips(err, url);
				}
			});
		},
		fail: function() {
			utils.rmLoading();
			utils.longToast('获取经纬度失败，请重新扫券');
			var err = {
				uid: app.getMyId(),
				msg: '兼职的手机没有获得经纬度，无法扫码'
			};
			utils.postErrNoTips(err, 'marketing-not-got-loc', 'op-failed');
		}
	});
}
